home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 5 / BBS in a Box -Volume V (BBS in a Box) (April 1992).iso / Files / Word / O-P / Optical Lens < prev    next >
Text File  |  1987-11-22  |  4KB  |  119 lines

  1.  
  2.  
  3.  
  4. ' ********************************************
  5. '               Lens Reduction by
  6. '                    Elian George Marrash Spring 1986
  7. ' ********************************************
  8. ' This program is written in Microsoft Basic V2.0 For the
  9. ' Apple Macintosh Computer.
  10. ' ********************************************
  11. ' The purpose of this program is to preform geometrical
  12. ' optical analysis, by the use of matrix methods.  It should
  13. ' noted that the user must know the order in which the
  14. ' 2x2 matrics are to be multipled, and that the user
  15. ' knows the form of the needed matrics.
  16. ' ********************************************
  17. '                             Main Routine
  18. ' ********************************************
  19. ' This routine is responsible for calling the needed
  20. ' subprograms, and for geeting the number of elements
  21. ' in the system.
  22. ' ********************************************
  23. DIM SYS(2,2), WORK(2,2), MATRIX2(2,2), ANS(2,2), INV(2,2)
  24. GOSUB DIRECTIONS
  25. DATAIN:
  26.     PRINT
  27.     INPUT "NUMBER OF 2x2 MATRICS TO BE USED.",N
  28.     IF N<2 THEN GOTO DATAIN
  29. CLS
  30. GOSUB REDUCE       ' Multiply and reduce the system to one matric
  31. GOSUB SOLVE          ' Solve the resultant matrix
  32. CLS
  33. GOSUB RESULTS     ' Print the results
  34. PRINT "DO YOU WANT TO ANALAYSIS ANOTHER SYSTEM OF LENS";
  35. INPUT ANSWER$
  36. IF ANSWER$="YES" THEN GOTO DATAIN
  37. STOP
  38.  
  39. DIRECTIONS:
  40. PRINT " THIS PROGRAM IS DESIGNED TO SOLVE A SYSTEM OF LENS"
  41. PRINT " USING 2x2 MATRIX MEATHODS.  THE USER MUST KNOW THE"
  42. PRINT " FORMAT OF THE 2x2 MATRIX FOR EACH LENS OR MIRROR"
  43. RETURN
  44.  
  45. ' ***************************************************
  46. ' This routine takes the inputted matricis and multiplies them
  47. ' together to get the final system matrix.
  48. ' ***************************************************
  49. REDUCE:
  50. PRINT "MATRIX 1"
  51. CALL INMATRIX(WORK())  ' Enter the elements of the first matrix
  52. PRINT "MATRIX 2"
  53. CALL INMATRIX(MATRIX2())   ' Enter the elements of the second matrix
  54. CALL MULTMATRIX(WORK(),MATRIX2(),SYS()) ' Multiply the first two matrics together
  55. IF N=2 THEN RETURN
  56. FOR COUNT=3 TO N
  57.     PRINT "MATRIX",COUNT
  58.     CALL INMATRIX(WORK()) ' Enter the remaining matrics
  59.     CALL MULTMATRIX(SYS(),WORK(),ANS())  ' Multiply remaining matrics
  60.     FOR II=1 TO 2
  61.         FOR JJ=1 TO 2
  62.             SYS(II,JJ)=ANS(II,JJ)
  63.         NEXT JJ
  64.     NEXT II
  65. NEXT COUNT
  66. RETURN
  67.  
  68. SOLVE:
  69. INPUT "WHAT IS THE DISTANCE OF THE OBJECT TO THE FIRST LENS",R1
  70. INPUT "WHAT IS THE FOCAL LENGTH OF THE FIRST LENS",F
  71. R1P=1/((1/R1)-(1/F))  ' Comput image distance
  72. CALL SOLVEMAT(R1,R1P,SYS(),R2,R2P,INV())
  73. RETURN
  74.  
  75. RESULTS:
  76. PRINT "THE IMAGE DISTANCE IS",R2P
  77. F1=1/((1/R2)+(1/R2P))
  78. PRINT "FOCAL LENGTH OF SYSTEM IS",F1
  79. RETURN
  80.  
  81. SUB INMATRIX(A(2,2)) STATIC
  82. FOR II=1 TO 2
  83.     FOR JJ=1 TO 2
  84.         PRINT "ELEMANT (";II;",";JJ;")";
  85.         INPUT A(II,JJ)
  86.     NEXT JJ
  87. NEXT II
  88. END SUB
  89.  
  90. SUB MULTMATRIX(A(2,2),B(2,2),C(2,2)) STATIC
  91. FOR I=1 TO 2
  92.     FOR J=1 TO 2
  93.         C(I,J)=0
  94.             FOR K=1 TO 2
  95.                 C(I,J)=C(I,J)+A(I,K)*B(K,J)
  96.             NEXT K
  97.     NEXT J
  98. NEXT I
  99. END SUB
  100.  
  101. ' *******************************************
  102. ' This routine first calculates the determinant of the 
  103. ' resulant matrix, and then finds its inverse, by using
  104. ' methods that are for 2x2 matrics only.  These can be
  105. ' found in any linear algrebra book.  Finally the matrix is
  106. ' solved.
  107. '********************************************
  108.  
  109. SUB SOLVEMAT(R1,R1P,C(2,2),R2,R2P,INV(2,2)) STATIC
  110. DET=C(1,1)*C(2,2)-C(1,2)*C(2,1)
  111. INV(1,1)=C(2,2)/DET
  112. INV(1,2)=-C(1,2)/DET
  113. INV(2,1)=-C(2,1)/DET
  114. INV(2,2)=C(1,1)/DET
  115. R2=R1*INV(1,1)+R1P*INV(1,2)
  116. R2P=R1*INV(2,1)+R1P*INV(2,2)
  117. END SUB
  118.